#include "myhead.h"

/*
	通过男女朋友聊天作为理解tcp流程的一种方式
	女朋友的代码
	为了演示现象方便，代码在ubuntu本机做测试
*/

int main()
{
	int tcpsock;
	int newsock;
	int ret;
	char rbuf[100];
	//定义ipv4地址结构体变量存放绑定的ip和端口号
	struct sockaddr_in bindaddr;
	bzero(&bindaddr,sizeof(bindaddr));
	bindaddr.sin_family=PF_INET;
	bindaddr.sin_addr.s_addr=inet_addr("192.168.19.3"); //绑定女朋友自己的ip，需要转换大小端
	bindaddr.sin_port=htons(10000); //绑定女朋友自己的端口号
	
	//定义ipv4地址结构体变量存放对方(客户端)的ip和端口号
	struct sockaddr_in boyaddr;
	int addrsize=sizeof(boyaddr);
	
	//创建tcp套接字
	tcpsock=socket(AF_INET,SOCK_STREAM,0);
	if(tcpsock==-1)
	{
		perror("创建tcp失败");
		return -1;
	}
	printf("旧的套接字是:%d\n",tcpsock);
	//绑定ip和端口号
	ret=bind(tcpsock,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
	if(ret==-1)
	{
		perror("绑定失败!\n");
		return -1;
	}
	
	//监听
	ret=listen(tcpsock,7);
	if(ret==-1)
	{
		perror("监听失败!\n");
		return -1;
	}
	
	//接受客户端的连接请求
	newsock=accept(tcpsock,(struct sockaddr *)&boyaddr,&addrsize);
	if(newsock==-1)
	{
		perror("接收连接失败!\n");
		return -1;
	}
	printf("新套接字是:%d\n",newsock);

	while(1)
	{
		bzero(rbuf,100);
		read(newsock,rbuf,100);  //必须使用新的套接字来收发信息，旧的套接字不能收发信息
		//read(tcpsock,rbuf,100);  //错误的示范，用错了套接字
		printf("客户端发送过来的信息是:%s\n",rbuf);
	}
	//关闭
	close(tcpsock);
	return 0;
}